/**
 * 文件名：@FreemarkerRenderer.java <br/>
 * 包名：cn.efunbox.afw.core.renderer <br/>
 * 项目名：afw-core <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.core.renderer.freemarker;

import java.io.Writer;

import cn.efunbox.afw.core.renderer.AbstractRenderer;

import freemarker.template.Configuration;
import freemarker.template.Template;

/**
 * 类名：FreemarkerRenderer  <br />
 *
 * 功能：基于freemarker模板引擎的模板渲染实现
 *
 * @author xtwin <br />
 * 创建时间：2015年12月1日 下午4:06:23  <br />
 * @version 2015年12月1日
 */
public class FreemarkerRenderer extends AbstractRenderer {
	
	// 配置器
	protected Configuration configuration;
	
	/**
	 * 构造方法
	 */
	public FreemarkerRenderer() {
		// 默认后缀名
		setSuffix(".ftl");
	}

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月1日 下午4:06:33<br/>
	 * 
	 * @param writer
	 * @param template
	 * @param encoding
	 * @param datas
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.core.renderer.AbstractRenderer#doRender(java.io.Writer, java.lang.String, java.lang.String, java.lang.Object)
	 */
	@Override
	protected void doRender(Writer writer, String template, String encoding, Object datas) throws Exception {
		Template _template = getTemplate(template, encoding, datas);
		
		_template.process(datas, writer);
	}
	
	/**
	 * 
	 * 功能：获取模板对象，可以通过重写该方法，实现从其它地方加载模板，如数据库中 <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2015年12月1日 下午4:12:59 <br/>
	 */
	protected Template getTemplate(String template, String encoding, Object datas) throws Exception {
		return configuration.getTemplate(template, encoding);
	}

	/**
	 * @version 2015年12月1日-下午4:14:51
	 */
	public void setConfiguration(Configuration configuration) {
		this.configuration = configuration;
	}
}